package com.test.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.test.mapper.EbProductMapper;
import com.test.model.EbProduct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashSet;
import java.util.Set;


@Service//证 service 层
public class EbProductService {
    @Autowired
    private EbProductMapper ebProductMapper;
    public Page<EbProduct> list(int psize,int limit){
        Page<EbProduct> page = new Page<>(psize,limit);
        return ebProductMapper.selectPage(page,null);
    }
    //根据id查询商品信息
    public EbProduct detail(int epId) {
        return ebProductMapper.selectById(epId);
    }

    //将商品加入购物车--session
    public void addCar(int epId, HttpServletRequest request){
        //1.调用mapper获取商品对象
        EbProduct newProduct = ebProductMapper.selectById(epId);
        //2.创建购物车(session)
        HttpSession session = request.getSession();
        //3.得到集合? (1.创建 2.从session获取)  list元素不唯一 set元素唯一
        Set<EbProduct> set = null ;
        //从购物车获取袋子
        set =  (Set<EbProduct>)session.getAttribute("car");
        if(set==null){
            set = new HashSet<>();
        }
        //4.将商品放入集合--List去重问题
        //4.1判断set中是否存在新加入购物车的商品
        //list.add(newProduct);//同一商品出现多次
        //标记法--》查找问题
        boolean flag = false;
        for(EbProduct oldEbProduct : set){
            //判断set中是否存在新加入购物车的商品
            if(newProduct.getEpId().equals(oldEbProduct.getEpId())){
                oldEbProduct.setCount(oldEbProduct.getCount()+1);
                flag=true;
                break;
            }
        }

        //4.2 将新添加的商品加入set集合
        if(!flag){
            set.add(newProduct);//必须实体类重写hashcode方法和equals方法
        }
        //5.将集合放到购物车
        session.setAttribute("car",set);

    }
 }
